缓冲分析 Sample详情
最后更新时间:2019年7月5日
邻近度(Proximity)描述了地理空间中两个地物距离相近的程度,其确定是空间分析的一个重要手段。如公共设施(商场,邮局,银行,医院,车站,学校等)的服务半径,大型水库建设引起的搬迁,铁路,公路以及航运河道对其所穿过区域经济发展的重要性等,均是一个邻近度问题。缓冲区分析是解决邻近度问题的空间分析工具之一 。
所谓缓冲区就是在点、线、区实体周围建立一定宽度范围的多边形。换言之,任何目标所产生的缓冲区总是一些多边形,这些多边形将构成新的数据层。点的缓冲区,以点的中心坐标为圆心,做半径为缓冲半径的圆;线的缓冲区,根据左右半径的设置形成缓冲区;区的缓冲区,将原始区图元边界向外或向内偏移缓冲半径大小后的区。点、线、区的缓冲分析采用同一套接口,实现方法类似。
1
查看缓冲分析的buffer方法,接口参数中分析的对象是MGSGeometry(几何对象基类),所以首先需获取待分析的对象。主要有以下三种方式获取MGSGeometry对象:
//要素查询 MGSFeaturePagedResult *queryResult=[featureQuery query]; //获取查询结果要素 MGSFeature *feature=[[queryResult getPageWithPageNumber:i]j]; //获取要素几何信息 MGSGeometry *geometry=[feature geometry];
//坐标点 MGSDot dot=MGSDotMake(12726121, 3610763); //创建点图形对象 MGSGraphicPoint *graphicPoint=[[MGSGraphicPoint alloc] initWithPoint:dot andSize:8]; //将图形对象转换为几何对象 MGSGeometry *geometry=[MGSGraphic toGeometryWithGraphic:graphicPoint];
//创建几何对象 MGSGeoPoint *geoPoint=[[MGSGeoPoint alloc] initWithDot3D:MGSDot3DMake(12726121, 3610763, 0)];
2
//实例化空间分析对象 MGSSpaAnalysis *bufferAnalysis=[[MGSSpaAnalysis alloc] init]; //执行缓冲分析功能(待分析几何对象、左半径、右半径) MGSGeoPolygons *geoPolygons=[bufferAnalysis buffer:geometry leftDis:800 rightDis:800];
SDK提供给了两个缓冲分析的接口,可根据需要选择。
接口 | 说明 |
---|---|
- (MGSGeoPolygon*)buffer:(MGSGeometry*)geom leftDis:(double)leftDis
rightDis:(double)rightDis endCapStyle:(short) endCapStyle; 参数:几何对象、左半径、右半径、缓冲区边界类型0/1/2-圆角/垂直/平角 |
计算左右缓冲区 |
-(MGSGeoPolygons*)buffer:(MGSGeometry*)geom leftDis:(double)leftDis
rightDis:(double)rightDis; 参数:几何对象、左半径、右半径 |
计算左右缓冲区(圆角边界) |
重要说明:
(1)接口中可以设置左半径、右半径,针对不同类型的几何对象具有不同的作用。 【1】对于点缓冲分析,没有左半径、右半径之说,接口规定分析的半径以左半径参数为准,所以只需要设置左半径即可。 【2】对于线缓冲,可以根据线的节点先后顺序确定线要素的方向,从而根据线的方向确定左右半径。 【3】对于区缓冲,同样没有左右半径之说,只是对区进行外部缓冲分析,接口规定点缓冲分析的半径以左半径参数为准,所以只需要设置左半径即可。
(2)第一个方法中通过第4个参数可以设置缓冲区边界类型为圆角、垂直、平角三种类型,得到的效果不一样。对于点缓冲区分析,只支持圆角和平角边界,区缓冲只只支持圆角边界;线缓冲三种边界类型都支持。
3
缓冲分析得到的结果为MGSGeoPolygons多区几何对象,根据应用需求,可以将其保存到地理要素中,也可以进行绘制显示,例如:
//将几何对象MGSGeoPolygons转换为几何图形MGSGraphic NSArray<MGSGraphic *> *graphicResult=[MGSGraphic toGraphicsFromGeometry:geoPolygons]; //一:可以直接按照默认样式快速绘制 [mapView.graphicsOverlay addGraphics:graphicResult]; //二:可以为图形设置自定义颜色再进行绘制 for (int i=0; i<[graphicResult count]; i++) { [graphicResult[i] setColor:[UIColor colorWithRed:253.0/255.0 green:212.0/255.0 blue:3.0/255.0 alpha:100.0/255.0]]; [mapView.graphicsOverlay addGraphic:graphicResult[i]]; } [mapView refresh]; //刷新地图
点缓冲分析的展示效果如下图所示:
线缓冲分析的实现方法与点缓冲分析类似,区别只在于传递的待分析的几何对象类型不一致。
//构建坐标点 MGSDot dot1=MGSDotMake(12728604, 3613047); MGSDot dot2=MGSDotMake(12724826, 3607732); //创建线图形对象并绘制 MGSGraphicPolylin *graphicPolyLin=[[MGSGraphicPolylin alloc] init]; //添加点、设置线图形样式(填充颜色、线宽) [graphicPolyLin appendPoint:dot1]; [graphicPolyLin appendPoint:dot2]; [graphicPolyLin setColor:[UIColor colorWithRed:255.0/255.0 green:154.0/255.0 blue:0/255.0 alpha:255.0/255.0]]; [graphicPolyLin setLineWidth:5]; [_mapView.graphicsOverlay addGraphic:graphicPolyLin]; //将线图形转为线几何要素以待分析 MGSGeometry *geometry=[MGSGraphic toGeometryWithGraphic:graphicPolyLin];
分析的效果如下图所示:
与点缓冲分析方法类似。
//坐标点 MGSDot dot1=MGSDotMake(12724496, 3612257); MGSDot dot2=MGSDotMake(12727000, 3612257); MGSDot dot3=MGSDotMake(12728471, 3609357); MGSDot dot4=MGSDotMake(12727000, 3607161); MGSDot dot5=MGSDotMake(12724957, 3607161); //创建区图形 MGSGraphicPolygon *graphicPolygon=[[MGSGraphicPolygon alloc] init]; [graphicPolygon appendPoint:dot1]; [graphicPolygon appendPoint:dot2]; [graphicPolygon appendPoint:dot3]; [graphicPolygon appendPoint:dot4]; [graphicPolygon appendPoint:dot5]; [graphicPolygon appendPoint:dot1]; [graphicPolygon setColor:[UIColor colorWithRed:255.0/255.0 green:154.0/255.0 blue:0/255.0 alpha:255.0/255.0]]; //区图形绘制 [mapView.graphicsOverlay addGraphic:graphicPolygon]; //将图形对象转换为几何对象 MGSGeometry *geometry=[MGSGraphic toGeometryWithGraphic:graphicPolygon];
区缓冲分析的结果如下图所示: